perm filename PRVLST[SS,SYS] blob sn#430426 filedate 1979-04-05 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	A B C D E T TT TTT R S W X Y Z P DSK LST PRVBIT UFDN LHPRVS NLHPRV RHPRVS NRHPRV WANTPR
C00005 00003	GO LOOP
C00008 00004	MFDSOR MFDSO1 MFDSO2 MFDSO3 MFDSO4 MFDSO5 LADJ RADJ
C00010 00005	LIST PRIVLP PRIVL1 NOPRV1 PRNBIT PRNLB1 PRNBTR PRNRB1 OCTLH OCTRH OCTOUT OCTOU1 OUTSIX SIXPUT SIXPU1 PUTSTR PUTST1 PUT CPOPJ1 CPOPJ
C00013 00006	NODISK NOMFD NOCORE MFDERR EMMFD NOTUFD NOUFD NORDIN NOENT PUTERR NOWRIN MFDPTR LSTBUF RDINFO WRINFO INFO PDL
C00015 ENDMK
C⊗;
;A B C D E T TT TTT R S W X Y Z P DSK LST PRVBIT UFDN LHPRVS NLHPRV RHPRVS NRHPRV WANTPR
TITLE PRVLST Make PRIVS.LST, the list of what users have what privileges

A←1
B←2
C←3
D←4
E←5
T←6
TT←7
TTT←10
R←11
S←12
W←13
X←14
Y←15
Z←16
P←17

DSK←←1
LST←←2

;INFO WORDS
PRVBIT←←1

UFDN←←20		;LENGTH OF A UFD ENTRY

DEFINE PRIVS <
;LEFT HALF
  XLPRIV PRI,400000
XLPRIV DAW,200000		;DISK ABSOLUTE WRITE 
XLPRIV PRO,100000		;FILE SYSTEM RENAME PRIV
XLPRIV REA,40000		;FILE SYSTEM READ PRIV
XLPRIV WRT,20000		;FILE SYSTEM WRITE PRIV
;;XLPRIV UDP,10000
XLPRIV AAO,10000		;ACCESS ALIAS AS OWNER
XLPRIV UPG,4000			;SELECT OTHER DPYS WITH UPGIOT
XLPRIV MES,2000			;CAN DO TTYMES ARBITRARILY
  XLPRIV KIL,1000
XLPRIV DEV,400			;CAN USE DET/ATT DEVICE COMMAND
  XLPRIV SEG,200
XLPRIV SSL,100			;CAN SET SERVICE LEVEL RESERVATION TABLE
XLPRIV ACW,40			;CAN DO ABS MODE WRITE USING SETPR2
XLPRIV INF,20			;CAN READ AND WRITE SPECIAL FILE INFO
  XLPRIV TLK,10
XLPRIV XGP,2			;THIS IS THE XGP FONT COMPILER
XLPRIV LUP,1			;LOCAL USER PRIVILEGE

;RIGHT HALF
XRPRIV ATT,400000		;ALLOWS ATTACH TO PHANTOMS
XRPRIV LIV,200000		;DEFEATS AUTOLOGOUT, LOOKED FOR BY SPY
XRPRIV CSP,40			;COMPUTER SCIENCE PERSONNEL FILES GROUP
XRPRIV ACT,20			;ACCOUNTING FILES GROUP
XRPRIV DEC,10			;DEC PROPRIETARY SOFTWARE FILES GROUP
XRPRIV SCY,4			;SECRETARY GROUP
XRPRIV SYS,2			;SYSTEMS PROGRAMMERS GROUP
XRPRIV MAS,1			;[1,YOURSELF] GROUP (MUST BE A RH PRIV FOR DSKSER)
>

DEFINE XLPRIV ! (NAME,BIT) <
NAME!PRV←←BIT
	BIT,,'NAME'
>
DEFINE XRPRIV (NAME,BIT) <>

LHPRVS:	PRIVS
NLHPRV←←.-LHPRVS

DEFINE XLPRIV (NAME,BIT) <>
DEFINE XRPRIV ! (NAME,BIT) <
NAME!PRV←←BIT
	BIT,,'NAME'
>

RHPRVS:	PRIVS
NRHPRV←←.-RHPRVS

WANTPR←←DAWPRV!REAPRV!ACWPRV!INFPRV	;PRIVILEGES THIS PROGRAM WANTS

EXTERNAL JOBFF,JOBREL
;GO LOOP

GO:	RESET
	MOVE P,[-100,,PDL-1]
	MOVEI A,0
	GETPRV A,
	TLO A,WANTPR
	SETPRV A,
	TLC A,WANTPR
	TLCE A,WANTPR
	JRST [	OUTSTR [ASCIZ /You are not privileged to run this program.  Please
see a wizard.
/]
		EXIT	]
	INIT DSK,17
	'DSK   '
	0
	JRST NODISK
	INIT LST,0
	'DSK   '
	LSTBUF,,
	JRST NODISK
	MOVE A,['PRIVS ']
	MOVSI B,'LST'
	SETZB C,D
	ENTER LST,A
	JRST NOENT
	MOVE A,['  1  1']
	MOVSI B,'UFD'
	MOVEI C,0
	MOVE D,['  1  1']
	LOOKUP DSK,A
	JRST NOMFD
	HRR D,JOBFF
	SUBI D,1
	MOVEM D,MFDPTR
	HLRE C,D
	HRRZ B,JOBFF
	SUB B,C
	HRRZM B,JOBFF
	CORE B,
	JRST NOCORE
	MOVEI E,0
	INPUT DSK,D
	STATZ DSK,740000
	JRST MFDERR
	CLOSE DSK,
	PUSHJ P,MFDSOR
	MOVE Z,MFDPTR
	ADDI Z,1
LOOP:	MOVE A,(Z)
	MOVSI B,'UFD'
	MOVEI C,0
	MOVE D,['  1  1']
	LOOKUP DSK,A
	JRST NOUFD
	MTAPE DSK,RDINFO
	JRST NORDIN
	PUSHJ P,LIST
	AOBJN Z,LOOP
	EXIT
;MFDSOR MFDSO1 MFDSO2 MFDSO3 MFDSO4 MFDSO5 LADJ RADJ

MFDSOR:	MOVE Z,MFDPTR
	AOJGE Z,EMMFD
	HRRZ X,Z
MFDSO1:	SKIPN A,(Z)
	JRST MFDSO2
	HLRZ B,1(Z)
	CAIE B,'UFD'
	JRST [	PUSHJ P,NOTUFD
		JRST MFDSO2	]
	HRRZ B,A		;PRG
	PUSHJ P,LADJ		;LEFT ADJUST IT
	HRLZM B,(X)
	HLRZ B,A		;PRJ
	PUSHJ P,LADJ
	HRRM B,(X)		;STORE PRG,,PRJ (LEFT ADJUSTED)
	ADDI X,1
MFDSO2:	ADD Z,[UFDN,,UFDN]
	JUMPL Z,MFDSO1
	HRRZ A,X
	CORE A,
	JRST NOCORE
	SUBI X,1
	SUB X,MFDPTR
	MOVN X,X
	HRLM X,MFDPTR
	MOVE Z,MFDPTR
	ADDI Z,1
MFDSO3:	MOVE A,(Z)
	MOVE X,Z
MFDSO4:	CAMLE A,(X)
	EXCH A,(X)
	AOBJN X,MFDSO4
	MOVEM A,(Z)
	AOBJN Z,MFDSO3
	MOVE Z,MFDPTR
	ADDI Z,1
MFDSO5:	MOVE A,(Z)
	HLRZ B,A
	PUSHJ P,RADJ
	HRRZM B,(Z)
	HRRZ B,A
	PUSHJ P,RADJ
	HRLM B,(Z)
	AOBJN Z,MFDSO5
	POPJ P,

LADJ:	SKIPE B
	TRNE B,770000
	POPJ P,
	LSH B,6
	JRST LADJ

RADJ:	SKIPE B
	TRNE B,77
	POPJ P,
	LSH B,-6
	JRST RADJ
;LIST PRIVLP PRIVL1 NOPRV1 PRNBIT PRNLB1 PRNBTR PRNRB1 OCTLH OCTRH OCTOUT OCTOU1 OUTSIX SIXPUT SIXPU1 PUTSTR PUTST1 PUT CPOPJ1 CPOPJ

LIST:	MOVE T,(Z)		;USER NAME
	SKIPN INFO+PRVBIT
	POPJ P,			;DON'T LIST UNLESS THERE ARE PRIVS
	PUSHJ P,SIXPUT
	MOVEI TT,11
	PUSHJ P,PUT
	MOVE A,INFO+PRVBIT	;GET PRIVILEGES
PRIVLP:	JFFO A,PRIVL1
	JRST NOPRV1
PRIVL1:	MOVSI C,400000
	MOVN B,B
	LSH C,(B)		;GENERATE THE BIT
	ANDCAM C,A		;TURN IT OFF IN A
	PUSHJ P,PRNBIT
	MOVEI TT,";"
	SKIPE A
	PUSHJ P,PUT
	JRST PRIVLP

NOPRV1:	MOVEI T,[ASCIZ /
/]
	PUSHJ P,PUTSTR
	POPJ P,

PRNBIT:	HLLZ B,C
	HRLZ C,C
	JUMPE B,PRNBTR		;JUMP IF NOT A LH BIT
	MOVSI C,-NLHPRV
PRNLB1:	TDNN B,LHPRVS(C)
	AOBJN C,PRNLB1
	JUMPGE C,OCTLH
	HRRZ T,LHPRVS(C)
	JRST OUTSIX

PRNBTR:	MOVSI B,-NRHPRV
PRNRB1:	TDNN C,RHPRVS(B)
	AOBJN B,PRNRB1
	JUMPGE B,OCTRH
	HRRZ T,RHPRVS(B)
	JRST OUTSIX

OCTLH:	HLRZ T,B
	PUSHJ P,OCTOUT
	MOVEI T,[ASCIZ /,,0/]
	JRST PUTSTR

OCTRH:	HLRZ T,C
OCTOUT:	IDIVI T,10
	JUMPE T,OCTOU1
	HRLM TT,(P)
	PUSHJ P,OCTOUT
	HLRZ TT,(P)
OCTOU1:	ADDI TT,"0"
	JRST PUT

OUTSIX:	JUMPE T,CPOPJ
	MOVEI TT,0
	ROTC T,6
	JUMPE TT,OUTSIX
	ADDI TT,40
	PUSHJ P,PUT
	JRST OUTSIX

SIXPUT:	JUMPE T,CPOPJ
	MOVEI TTT,6
SIXPU1:	MOVEI TT,0
	ROTC T,6
	ADDI TT,40
	PUSHJ P,PUT
	SOJG TTT,SIXPU1
	POPJ P,

PUTSTR:	HRLI T,440700
PUTST1:	ILDB TT,T
	JUMPE TT,CPOPJ
	PUSHJ P,PUT
	JRST PUTST1

PUT:	SOSG LSTBUF+2
	OUT LST,
	CAIA
	JRST PUTERR
	IDPB TT,LSTBUF+1
	POPJ P,

CPOPJ1:	AOS (P)
CPOPJ:	POPJ P,
;NODISK NOMFD NOCORE MFDERR EMMFD NOTUFD NOUFD NORDIN NOENT PUTERR NOWRIN MFDPTR LSTBUF RDINFO WRINFO INFO PDL

NODISK:	OUTSTR [ASCIZ /CAN'T INIT THE DISK
/]
	EXIT

NOMFD:	OUTSTR [ASCIZ /CAN'T LOOKUP THE MFD
/]
	EXIT

NOCORE:	OUTSTR [ASCIZ /NOT ENOUGH CORE
/]
	EXIT

MFDERR:	OUTSTR [ASCIZ /ERROR READING MFD
/]
	EXIT

EMMFD:	OUTSTR [ASCIZ /THE MFD IS EMPTY
/]
	EXIT

NOTUFD:	OUTSTR [ASCIZ /EXTENSION IN MFD IS NOT 'UFD'
/]
	POPJ P,

NOUFD:	OUTSTR [ASCIZ /CAN'T LOOKUP A UFD
/]
	EXIT

NORDIN:	OUTSTR [ASCIZ /MTAPE TO READ INFO FAILED
/]
	EXIT

NOENT:	OUTSTR [ASCIZ /CAN'T ENTER PRIVS.LST
/]
	EXIT

PUTERR:	OUTSTR [ASCIZ /ERROR IN OUTPUT TO LIST FILE
/]
	EXIT

NOWRIN:	OUTSTR [ASCIZ /MTAPE TO WRITE INFO FAILED
/]
	EXIT

MFDPTR:	0
LSTBUF:	BLOCK 3
RDINFO:	'GODMOD'
	10
	INFO
WRINFO:	'GODMOD'
	11
	INFO
INFO:	BLOCK 4
PDL:	BLOCK 100
	END GO